/*-
* See the file LICENSE for redistribution information.
*
* Copyright (c) 2002-2006
* Sleepycat Software. All rights reserved.
*
* $Id: CheckpointStart.java,v 1.1 2006/05/06 09:00:37 ckaestne Exp $
*/
package com.sleepycat.je.recovery;
import java.nio.ByteBuffer;
import java.sql.Timestamp;
import java.util.Calendar;
import com.sleepycat.je.log.LogEntryType;
import com.sleepycat.je.log.LogException;
import com.sleepycat.je.log.LogReadable;
import com.sleepycat.je.log.LogUtils;
import com.sleepycat.je.log.LoggableObject;
/**
* CheckpointStart creates a log entry that marks the beginning of a
* checkpoint.
*/
public class CheckpointStart implements LoggableObject, LogReadable {
private Timestamp startTime;
private long id;
/*
* invoker is just a way to tag each checkpoint in the log for easier log
* based debugging. It will tell us whether the checkpoint was invoked by
* recovery, the daemon, the api, or the cleaner.
*/
private String invoker;
public CheckpointStart(long id, String invoker) {
Calendar cal = Calendar.getInstance();
this.startTime = new Timestamp(cal.getTime().getTime());
this.id = id;
if (invoker == null) {
this.invoker = "";
} else {
this.invoker = invoker;
}
}
/* For logging only. */
public CheckpointStart() {
}
/*
* Logging support for writing.
*/
/**
* @see LoggableObject#getLogType
*/
public LogEntryType getLogType() {
return LogEntryType.LOG_CKPT_START;
}
/**
* @see LoggableObject#marshallOutsideWriteLatch
* Can be marshalled outside the log write latch.
*/
public boolean marshallOutsideWriteLatch() {
return true;
}
/**
* @see LoggableObject#countAsObsoleteWhenLogged
*/
public boolean countAsObsoleteWhenLogged() {
return false;
}
/**
* @see LoggableObject#postLogWork
*/
public void postLogWork(long justLoggedLsn) {
}
/**
* @see LoggableObject#getLogSize
*/
public int getLogSize() {
return LogUtils.getTimestampLogSize() +
LogUtils.getLongLogSize() +
LogUtils.getStringLogSize(invoker);
}
/**
* @see LoggableObject#writeToLog
*/
public void writeToLog(ByteBuffer logBuffer) {
LogUtils.writeTimestamp(logBuffer, startTime);
LogUtils.writeLong(logBuffer, id);
LogUtils.writeString(logBuffer, invoker);
}
/**
* @see LogReadable#readFromLog
*/
public void readFromLog(ByteBuffer logBuffer, byte entryTypeVersion)
throws LogException {
startTime = LogUtils.readTimestamp(logBuffer);
id = LogUtils.readLong(logBuffer);
invoker = LogUtils.readString(logBuffer);
}
/**
* @see LogReadable#dumpLog
*/
public void dumpLog(StringBuffer sb, boolean verbose) {
sb.append("<CkptStart invoker=\"").append(invoker);
sb.append("\" time=\"").append(startTime);
sb.append("\" id=\"").append(id);
sb.append("\"/>");
}
/**
* @see LogReadable#logEntryIsTransactional
*/
public boolean logEntryIsTransactional() {
return false;
}
/**
* @see LogReadable#getTransactionId
*/
public long getTransactionId() {
return 0;
}
}